package com.yourenbang.lingyun.transaction.constant;

/**
 * 变动状态常量,状态次序
 * <p>
 * 状态次序变化: WAIT_TO_CHANGE -> CHANGING -> 终态(CHANGED、FAIL、CANCEL) <br/>
 * (1) 以上三步可以跳过,如加帐可直接标记为CHANGED <br/>
 * (2) 终态为最终状态,不可更改,逆转、也不应对此plan相关的流水记录做任何修改,如确实需要撤销,通过另起一个plan完成
 * </p>
 */
public class ChangePlanStatus {

    /**
     * 计划等待被执行
     * <p>
     * 注：定时任务会对这部分业务进行重试，因此任务在执行前，需要更新为CHANGING，
     *
     */
    public static final short WAIT_TO_CHANGE = 100;

    /**
     * 计划正在执行
     * <p>
     * 如提现plan中，当发起支付宝提款前，应更新成此状态(也避免WAIT_TO_CHANGE重复执行)，当计划得到进一步状态后，应相应更新其状态，
     * 接收到支付宝转账成功后，应将状态更新为CHANGED
     */
    public static final short CHANGING = 110;

    /**
     * 计划执行完成
     * <p>
     * 例：商户提现
     * 正确操作：只有当银行确认回执成功时，才更新成此状态
     * 错误操作：当发起银行请求后，但未收到银行成功打款前，更新此状态
     */
    public static final short CHANGED = 200;

    /**
     * 计划执行失败,用于对于资金未产生变动失败的情况,一般在资金流水中无记录
     * <p>
     *    例: 额度不足导致减帐失败 <br/>
     *    正确操作: 减帐、加帐 系统账户不足 <br/>
     *    错误操作: 提现失败,这种情况由于在资金流水
     * </p>
     */
    public static final short FAIL = 300;

    /**
     * 计划被取消,用于对于资金已产生变动需回滚的情况,一般在资金流水中已产生记录
     * <p>
     *    例: 额度不足导致减帐失败 <br/>
     *    正确操作: 减帐、加帐 系统账户不足 <br/>
     *    错误操作: 额度不足导致减帐失败,此场景会在资金变动前检查,应修改为 {@link ChangePlanStatus#FAIL}
     * </p>
     */
    public static final short CANCEL = 400;
}
